package com.quantoeugasto.entidade;

import java.util.LinkedList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.SequenceGenerator;

/**
 * Classe que representa uma categoria de gastos.
 * 
 * @author Fabiano
 */
@Entity
@SuppressWarnings("serial")
public class Categoria extends Entidade<Long>{
	
	private Long id;
	private String nome;
	private List<Gasto> gastos;
	private Usuario usuario;

	public Categoria() {
		this.gastos = new LinkedList<Gasto>();
	}
	
	/**
	 * Cria uma nova categoria com os atributos informados.
	 * 
	 * @param nome Nome da categoria.
	 * @param usuario Usuário que está relacionado a esta categoria.
	 */
	public Categoria(String nome, Usuario usuario) {
		this.nome = nome;
		this.gastos = new LinkedList<Gasto>();
		this.usuario = usuario;
	}

	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CAT_GEN")
	@SequenceGenerator(name="CAT_GEN")
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	@Column(length = 20, nullable = false)
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	@OneToMany(mappedBy = "categoria")
	@OrderBy("data")
	public List<Gasto> getGastos() {
		return gastos;
	}

	public void setGastos(List<Gasto> gastos) {
		this.gastos = gastos;
	}

	@ManyToOne(optional = false)
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	@Override
	public Long obterChavePrimaria() {
		return this.id;
	}
	
}
